package main

import (
	maker2 "api/libs/maker"
	"gitee.com/dreamwood/ez-maker/maker"
)

func main() {
	maker2.Prepare()
	ItemBase()
	ItemAttribute()
	ItemSku()
	ItemCategory()
	Unit()
	AttributeKey()
	AttributeValue()
}

// 物品名称 如手套
func ItemBase() {
	c := maker.CreateTable("ItemBase", "物品", "wms")
	c.AddText("name", "名称")
	c.AddManyToOne("category", "分类", "ItemCategory")
	c.AddManyToOne("unit", "单位", "Unit")

	c.AddOneToMany("attributes", "属性", "ItemAttribute")
	c.AddOneToMany("skus", "SKU", "ItemSku")

	//数据版本
	c.AddInt("version", "版本").SetDesc("sku最新版本")

	c.Generate()
}

func ItemSku() {
	c := maker.CreateTable("ItemSku", "物品SKU", "wms")
	c.AddManyToOne("itemBase", "物品", "ItemBase")
	c.AddText("text", "物品SKU描述")
	c.AddText("code", "物品SKU编码")
	//通过基本单位基数和转换量计算数量转化，没有使用比率是考虑到无限循环的情况导致的数值误差
	c.AddManyToOne("unit", "单位", "Unit")
	c.AddFloat("unitBase", "基本单位基数").SetDefaultValue("1")
	c.AddFloat("unitExchange", "单位转换量")
	//数据版本
	c.AddInt("version", "版本").SetDesc("设置不同版本，以应对优于参数变更导致的数据丢失")
	c.AddBool("isOn", "是否使用")
	c.AddDelete()
	c.Generate()
}

func ItemCategory() {
	c := maker.CreateTable("ItemCategory", "物品分类", "wms")
	c.AddText("name", "分类名称")
	c.AddCode()
	c.AddText("note", "范围说明").SetLength(500)
	c.LoadTree()
	c.Generate()
}

func Unit() {
	c := maker.CreateTable("Unit", "计量单位", "wms")
	c.AddName()
	c.AddText("en", "英文")
	c.AddSort()
	c.Generate()
}

// 物品属性 如手套-颜色：黑色,红色
func ItemAttribute() {
	c := maker.CreateTable("ItemAttribute", "物品属性", "wms")
	c.AddManyToOne("itemBase", "物品", "ItemBase")

	c.AddManyToOne("attribute", "属性", "AttributeKey")
	//冗余字段，根据选择的attribute生成相应内容
	c.AddText("name", "属性名称")
	c.AddText("values", "属性值") //数组
	c.AddCode()

	c.AddSort()
	c.Generate()
}

func AttributeKey() {
	c := maker.CreateTable("AttributeKey", "属性键", "wms")
	c.AddName()
	c.AddCode()
	c.AddText("note", "说明")
	c.AddOneToMany("values", "值", "AttributeValue").SetFk("kId")
	c.Generate()
}

func AttributeValue() {
	c := maker.CreateTable("AttributeValue", "属性值", "wms")
	c.AddManyToOne("k", "键", "AttributeKey")
	c.AddManyToOne("itemBase", "物品", "ItemBase")
	c.AddName()
	c.AddSort()
	c.AddCode()
	c.AddText("note", "备注")
	c.AddBool("isOn", "启用")
	c.Generate()
}
